import axios from 'axios'
import {MessageBox, Message} from 'element-ui'
import store from '@/store'
// import {getToken, setToken} from '@/utils/auth'
import qs from 'qs'
// export const qss = param => {
//   return qs.stringify(param,{ indices: false })
// }
// create an axios instance
const service = axios.create({
    headers: {
        // 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
        // 'Content-Type': 'application/json; charset=UTF-8'
    },
    baseURL: process.env.VUE_APP_BASE_API, // url = base url + req  uest url
    withCredentials: true, // send cookies when cross-domain requests
    timeout: 150000, // request timeout
    transformRequest: [function (data, headers) {
        if(headers['Content-Type']=="multipart/form-data"){

            return data
        }
        // Do whatever you want to transform the data
        if (data && data.json) {

            headers['Content-Type'] = 'application/json; charset=UTF-8'
            return JSON.stringify(data)
        } else {
            return qs.stringify(data, {indices: false})
        }


    }],
})


// request interceptor
service.interceptors.request.use(
    config => {
        // do something before request is sent

        if (store.getters.token) {
            // let each request carry token
            // ['X-Token'] is a custom headers key
            // please modify it according to the actual situation
            // config.headers['YF-TOKEN'] = getToken()
        }
        return config
    },
    error => {
        // do something with request error
        console.log(error) // for debug
        return Promise.reject(error)
    }
)

// response interceptor
service.interceptors.response.use(
    /**
     * If you want to get http information such as headers or status
     * Please return  response => response
     */

    /**
     * Determine the request status by custom code
     * Here is just an example
     * You can also judge the status by HTTP Status Code
     */
    response => {
        const res = response.data
        if(!res.code){
            download(res)
            return
        }

        // if the custom code is not 20000, it is judged as an error.
        if (res.code !== 10000) {
            Message({
                message: res.msg || 'error',
                type: 'error',
                duration: 5 * 1000
            })

            // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
            if (res.code === 10002) {
                // to re-login
                MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
                    confirmButtonText: 'Re-Login',
                    cancelButtonText: 'Cancel',
                    type: 'warning'
                }).then(() => {
                    // setToken('');
                    location.reload()
                    // store.dispatch('user/resetToken').then(() => {
                    //   location.reload()
                    // })
                })
            }
            return Promise.reject(res.msg || 'error')
        } else {
            return res
        }
    },
    error => {
        console.log('err' + error) // for debug
        Message({
            message: error.msg,
            type: 'error',
            duration: 5 * 1000
        })
        return Promise.reject(error)
    }
)

export default service


//下载文件
function download(data) {
    if (!data) {
        return
    }
    var blob = new Blob([data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'})
    var url = window.URL.createObjectURL(blob);
    var aLink = document.createElement("a");
    aLink.style.display = "none";
    aLink.href = url;
    aLink.setAttribute("download", "excel.xls");
    document.body.appendChild(aLink);
    aLink.click();
    document.body.removeChild(aLink); //下载完成移除元素
    window.URL.revokeObjectURL(url); //释放掉blob对象
}

